/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package stub;

/**
 *
 * @author nacho
 */
public class Protocolo {
    static public final int TAMANIO_BLOQUE = 512;

    //Operaciones
    static final public int RFS_OPEN = 1;
    static final public int RFS_READ = 2;
    static final public int RFS_WRITE = 3;
    static final public int RFS_CLOSE = 4;
    static final public int RFS_STATUS = 5;
    //Status
    static final public int FILE_NOT_FOUND = -1;
    static final public int FILE_FOUND = -2;
    static final public int ACCESS_DENIED = -3;
    static final public int CONECTION_FAILED = -4;
    static final public int OK = -5;
    static final public int OPERATION_ERROR = -6;
    static final public boolean WRITE = true;
    static final public boolean READ = false;



    static private Protocolo protocolo = new Protocolo();


    private Protocolo() {
        //Códigos de operaciones
    }

    static public Protocolo getInstance() {
        return protocolo;
    }

    //Empaquetar mensaje Open
   //CLIENTE
    protected Mensaje empaquetar(int codOp, boolean modo, String nombreArchivo) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setNombreArchivo(nombreArchivo);
        men.setWrite(modo);
        return men;
    }
    //SERVIDOR
    protected Mensaje empaquetar(int codOp, String nombreArchivo, int status, int archivo) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setStatus(status);
        men.setArchivo(archivo);
        men.setNombreArchivo(nombreArchivo);
        return men;
    }

    //Empaquetar mensaje Read, Close
    protected Mensaje empaquetar(int codOp, int archivo, String filename) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setArchivo(archivo);
        men.setNombreArchivo(filename);
        return men;
    }
    //SERVIDOR
    protected Mensaje empaquetar(int codOp, String nombreArchivo, int status, byte[] data, long longitudData) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setStatus(status);
        men.setData(data,longitudData);
        men.setNombreArchivo(nombreArchivo);
        return men;
    }

    //Empaquetar mensaje Write
    protected Mensaje empaquetar(int codOp, String nombreArchivo, int archivo, byte[] data, int longitudData, int seek) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setArchivo(archivo);
        men.setData(data,longitudData);
        men.setNombreArchivo(nombreArchivo);
        return men;
    }

     protected Mensaje empaquetar(int codOp, int status) {
        Mensaje men = new Mensaje();
        men.setCodOp(codOp);
        men.setStatus(status);
        return men;
    }


    protected int desempaquetarCodOp(Mensaje mensaje){
        return mensaje.getCodOp();
    }

    protected String desempaquetarNombreArchivo(Mensaje mensaje){
        return mensaje.getNombreArchivo();
    }

    protected int desempaquetarArchivo(Mensaje mensaje) {
        return mensaje.getArchivo();
    }

    protected byte[] desempaquetarData(Mensaje mensaje) {
        return mensaje.getData();
    }

    protected long desempaquetarLongitudData(Mensaje mensaje) {
        return mensaje.getLongitudCargaUtil();
    }

    protected int desempaquetarStatus(Mensaje mensaje) {
        return mensaje.getStatus();
    }

    protected boolean desempaquetarWrite(Mensaje mensaje) {
        return mensaje.isWrite();
    }

}
